1. Technical Field
The present invention relates to apparatus for automatically generating source code, and is particularly, but not exclusively, suitable for generating source code for communication services.
2. Related Art
Traditionally, software development has comprised several identifiable processes: requirements capture, where customer requirements are broken down into fundamental descriptions that can be used to create specifications; design of software elements to these specifications; implementation of the software elements to create a software deliverable; and maintenance of the software deliverable. In many cases, the customer requirements further include developing hardware, which will be integrated with the software deliverable. All of these processes are time consuming and costly in their preparation, and often there are integration and implementation problems. In order to correct these problems, some re-design may be required, which often delays the down-streaming of the deliverables and adds significantly to the costs.
Several groups have focussed on identifying areas in the development process that could be pruned to offer time and cost savings, noting in particular that around sixty to seventy percent of a system's functionality duplicates that of other systems. There is thus significant interest in developing tools that generate software automatically, as this offers reductions in software design stage costs. AT&T have disclosed, in “Object Magazine 5, 1995”, a tool that can generate object-oriented code from graphical models. However, ideally automatic code generators should be adaptable to different platforms, different standards, and different languages, and not be restricted to generating object oriented code.
Automating the validation of code could also offer significant cost savings, as identified by the British Aerospace Dependable Computer System Centre in York, in “Qualification of automatic code generation using formal techniques”1. The paper presents an animation facility to validate the code, which embeds formal methods to perform the validation itself. 1 for the IEE colloquium on “practical application of formal methods”
There are several quasi-automatic code generators, such as the “wizards” developed by the Microsoft™ Corporation; these create basic class template syntax, leaving the programmer to insert the code that is specific to the application under development. However, these are language specific, are limited to producing code templates, and require the user have a working knowledge of the language itself. Another quasi-automatic method of code generation includes “forms”, where a user fills in fields comprising the form. However, the entries must adhere to a specific format, and the functionality of the code that is generated is extremely limited.
Methods of using graphical methods to generate code are also well known. For example, the JBuilder™ product from Borland incorporates a GUI designer by which the software developer can use a visual tool to draw the required user interface elements. The system then produces appropriate Java source code to handle these elements automatically, and allows the developer to merge this with conventionally-written code. Other systems such as Rational Rose™ and Oracle Designer™ allow the developer to express the program logic using graphical symbols, and then generate code automatically. In all of these cases the user must have a knowledge of the graphical notation used, which may be Unified Markup Language (UML) or some other convention. In addition, the user must have a good understanding of the programming language used in order that he or she can fill in certain parts of the template code produced, and also interface the automatically generated code with other parts of the software application. This restricts the usefulness of this type of system to experienced software programmers.
There are many situations where it is desirable for a non-programmer to be able to program a system so that it can subsequently act on his or her behalf without further interaction. A telephone answering machine is a simple example of such a system; the user implicitly instructs the device to answer the telephone call and to record a message in his or her absence. Another well-known example is the video recorder, which may be set to record a programme when the user is out or fast asleep. However, it is well know that many people have difficulty even with the relatively simple task of programming a video recorder. In addition, even experienced programmers make errors, particularly when dealing with complex logic, and the process of testing that the program behaves as required (debugging) is a well established part of the software development process.
As e-commerce continues to develop, examples of systems to which a user delegates some of his or her authority, will become more widespread. A recent example is that of a proxy, used in on-line auctions. The user can instruct his or her proxy to bid up to a certain amount for a particular item. Future systems may allow much more complex negotiations to be carried out in real time, following the instructions laid down previously by the human user. If these systems are to be used and trusted, it is essential that users without programming experience can program them effectively and have confidence that the system will subsequently exhibit the appropriate behaviour. Preferably this should not require the user to learn a programming language or a particular graphical notation.